type mapEnumValueType = {
    label: string
    value: any
}
export type mapEnumType = {
    [key: string]: mapEnumValueType
}
export function mapEnumHook(data: mapEnumType) {
    const _mapEnum = new MapEnum(data)
    return {
        options: _mapEnum.options,
        getOptions: _mapEnum.getOptions,
        getLabel: _mapEnum.getLabel,
        getOption: _mapEnum.getOption,
        hasValue: _mapEnum.hasValue,
    }
}

export function createMapEnum(data: mapEnumType) {
    const _mapEnum = new MapEnum(data)
    return _mapEnum
}
export default class MapEnum {
    _data: mapEnumType
    constructor(data: mapEnumType) {
        this._data = data
    }

    get options() {
        return this.getOptions()
    }

    getOptions() {
        return Object.entries(this._data).map(([key, value]) => ({ ...value, name: key }))
    }

    getLabel(value: any) {
        return this.getOptions().find(({ value: v }) => v === value)?.label
    }

    getOption(value: any) {
        return this.getOptions().find(({ value: v }) => v === value)
    }

    hasValue(value: any) {
        return !!this.getLabel(value)
    }
}
